// var 是函数作用域
// let 是块级作用域
// if (true) {
//   var uname = 'cuifan'
//     // console.log(uname);
// }
// // console.log(uname);

// if (true) {
//   let uname1 = 'cuifan1'
//     // console.log(uname1);
// }
// // console.log(uname1); // 报错显示uname1没有定义

// // let 也不允许同一个块作用域中出现冗余声明
// let cuifan1;
// let cuifan1

// JS引擎会记录用于变量声明的标识符和它所在的块作用域，嵌套使用相同的标识符不会报错
// var message = 'hello'
// console.log(message);
// if (true) {
//   var message = 'bye'
//   console.log(message);
// }
// console.log(message);

// let message1 = 'hello1'
// console.log(message1);
// if (true) {
//   let message1 = 'bye1'
//   console.log(message1);
// }
// console.log(message1);

// let声明的变量没有全局提升，会出现暂时性死区
// console.log(message2);
// let message2 = 'hello'

// let声明的全局变量不会变成window对象的属性
// let message3 = 'message3'
// var message4 = 'message4'
// message5 = 'message5'
// console.log(window.message3);
// console.log(window.message4);
// console.log(window.message5);

// for循环中的let声明
// var array = [1, 2, 3, 4, 5]

// for (var i = 0; i < array.length; i++) {
//   setTimeout(function() {
//     console.log(i);
//   })
// }

// for (let i = 0; i < array.length; i++) {
//   setTimeout(function() {
//     console.log(i);
//   })
// }

// for (var i = 0; i < array.length; i++) {
//   // var声明的变量具有函数局部作用域
//   (function(i) {
//     setTimeout(function() {
//       console.log(i);
//     })
//   })(i)
// }

// var obj = {
//   1: 'cuifan',
//   2: 'simon'
// }

// for (let key of Object.keys(obj)) {
//   console.log(key);
// }

// for (let key in obj) {
//   console.log(key);
// }
console.log(num);
let num = 10